package com.hc.java.io;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.Scanner;

/**
 * @author huangchao E-mail:fengquan8866@163.com
 * @version 创建时间：2024/6/13 12:06
 */
public class NioClientDemo {
    public static void main(String[] args) throws IOException {
        // 1.创建连接服务器的地址
        InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 9999);
        // 2.创建一个与服务端的连接通道，注意此时并没有连接服务端
        SocketChannel channel = SocketChannel.open();
        // 3.连接通道：让通道与服务端的地址接通
        channel.connect(socketAddress);
        // 4.创建缓冲区，非阻塞，数据是不会之间与服务端通信的，交给缓冲区
        ByteBuffer buf = ByteBuffer.allocate(1024); // 1kB
        Scanner sc = new Scanner(System.in);
        // 5.循环发送数据给服务端
        while (true) {
            // 定义一个字节数组封装用户输入的数据
            // 接收用户的键盘输入，存储到msg中去
            String msg = sc.nextLine();
            byte[] buffer = msg.getBytes();
            // 把数据写给缓冲区
            buf.put(buffer);
            // 复位缓冲区，把指针放到第一个位置
            buf.flip();
            // 开始写出数据，把缓冲区发给了服务端
            channel.write(buf);
            // 情况缓冲区
            buf.clear();
        }
    }
}
